#ifndef Pion_h
#define Pion_h

#include <vector>
#include <ostream>

#include "PionManager.h"

class Joueur;
class Couleur;
class Territoire;
class Visitor;
class Model3D;

/**
 * Classe Pion
 */
class Pion 
{

   friend std::ostream & operator<<(std::ostream &, const Pion &);

 public:

   Pion(Joueur * _joueur, Territoire * _territoire, PionManager::Level _level);
   ~Pion();
   void accept(Visitor * _visitor);

   Model3D * getModelLevel();
   PionManager::Level getLevel() { return level; }
   Joueur * getJoueur() { return joueur; }
   const Joueur * getJoueur() const { return joueur; }
   const Territoire * getTerritoire() const { return territoire; }
   Point3D * getPosition() { return &position; }
   const float * getCouleur();
   const float getAlpha() const;

   void setAlpha(const float _a);
   void setModelLevel(PionManager::Level _level) { level = _level; }

 protected:

    Point3D position;
    Joueur * joueur;
    Couleur * couleur;
    Territoire * territoire;
    PionManager::Level level;

};
#endif

